package com.lvshi0797.cms.service;

import java.util.List;
import java.util.Set;

import com.lvshi0797.cms.dto.ProjectDto;
import com.lvshi0797.cms.entities.FBaseInfo;
import com.lvshi0797.cms.entities.FManager;
import com.lvshi0797.cms.entities.FProjectInfo;
import com.lvshi0797.cms.entities.Pager;
import com.lvshi0797.cms.helper.BussinessException;

public interface IBaseInfoService {
	/**
	 * 新增建档立卡
	 */
	public FBaseInfo createArchive(FBaseInfo baseInfo)
			throws BussinessException;

	/**
	 * 根据用户的ID列出所辖的BaseInfo信息
	 * 
	 * @param id
	 * @return
	 */
	public List<FBaseInfo> listBaseInfo(int id);

	/**
	 * 根据筛选条件进行筛选
	 * 
	 * @param manager
	 *            管理员
	 * @param huzhuName
	 *            户主姓名
	 * @param town
	 *            乡镇、村、组
	 * @param isOutpoor
	 *            是否脱贫 0否，1是，-1全部
	 * @param startD
	 *            2016-10-01
	 * @param endD
	 *            2016-10-01
	 * @return
	 */
	public List<FBaseInfo> listBaseInfo(FManager manager, String huzhuName,
			String town, String isOutpoor, String startD, String endD)
			throws BussinessException;

	/**
	 * 根据用户的ID列出所辖的BaseInfo信息
	 * 
	 * @param id
	 * @return
	 */
	public Pager<FBaseInfo> findBaseInfo(int id);

	/**
	 * 根据筛选条件进行筛选
	 * 
	 * @param manager
	 *            管理员
	 * @param huzhuName
	 *            户主姓名
	 * @param town
	 *            乡镇、村、组
	 * @param isOutpoor
	 *            是否脱贫 0否，1是，-1全部
	 * @param startD
	 *            2016-10-01
	 * @param endD
	 *            2016-10-01
	 * @return
	 */
	public Pager<FBaseInfo> findBaseInfo(FManager manager, String huzhuName,
			String town, String isOutpoor, String addTime)
			throws BussinessException;

	/**
	 * 建档立卡信息更新 1.addTime不可更新 2.manager不可更新
	 * 
	 * @param baseInfo
	 * @throws BussinessException
	 */
	public void updateBaseinfo(FBaseInfo baseInfo) throws BussinessException;

	/**
	 * 
	 * @param id
	 * @return
	 * @throws BussinessException
	 */
	public FBaseInfo loadBaseInfo(int id) throws BussinessException;

	/**
	 * 根据ID删除BaseInfo
	 * 
	 * @param id
	 * @throws BussinessException
	 */
	public void deleteBaseInfoById(int id) throws BussinessException;

	/**
	 * 清空BaseId下的某niandu所有的项目信息
	 * 
	 * @param baseId
	 * @param niandu
	 */
	public void clearProject(int baseId, String niandu);

	/**
	 * 将ProjectDto中的元素转换为FProjectInfo
	 * 
	 * @param pdo
	 * @param baseId
	 * @return 返回已添加到数据库中的项目的ID集合，下一步将这些项目信息与baseId关联起来即可（
	 *         不在此业务方法中关联是因为这个业务方法的(清空)delete语句会在最后一步操作）
	 */
	public Set<Integer> addProjects(ProjectDto pdo, int baseId);

	/**
	 * 查询出baseId下的所有的项目信息
	 * 
	 * @param baseId
	 * @param niandu
	 * @return
	 */
	public ProjectDto getProjects(int baseId,String niandu);
	/**
	 * 将ids里的所有FProjectInfo的id与baseId关联
	 * @param ids
	 * @param baseId
	 */
	public void updateProject(Set<Integer> ids,int baseId);

}
